草庐IT

Android isScreenOn Nullpointer异常

全部标签

c++ - 为什么我的程序在析构函数抛出异常时终止?

我不明白为什么如果有一个活跃的异常,那么如果再次引发异常,它会导致程序终止。有人可以解释一下吗? 最佳答案 它应该做什么?它不能“双重捕获”或任何东西,简单地忽略一个也没有意义。该标准规定,如果在堆栈展开期间,另一个异常逃逸,则应调用terminate。C++FAQ中有更多讨论.一种“解决方案”是将析构函数代码包装在try/catchblock中,并且不要让异常逃逸。另一个是提出某种自定义异常链接方案。您将执行上述操作,但不是忽略异常,而是将其附加到当前抛出的异常,并在捕获站点手动处理这两个异常。我认为最好的解决方案是尝试从析构函数

c++ - 如何用支持 __LINE__ 和 __FILE__ 的内联函数替换我的 C++ 异常宏?

我目前正在阅读ScottMeyers的《EffectiveC++》一书。它说对于类似函数的宏,我应该更喜欢inline函数而不是#define。现在我尝试编写一个内联函数来替换我的异常宏。我的旧宏看起来像这样:#define__EXCEPTION(aMessage)\{\std::ostringstreamstream;\stream我的新内联函数是这样的:inlinevoid__EXCEPTION(conststd::stringaMessage){std::ostringstreamstream;stream可能有些人已经预料到,现在__FILE__和__LINE__宏没用了,因为

c++ - 构造函数初始化列表中的异常处理

在我的项目中,我发现了一段代码,其中在构造函数的初始化列表中调用了一个方法。Test2(Test*pTest):m_pTest(pTest),m_nDuplicateID(pTest->getTestID()){}我观察到Test2的用户有可能将NULL传递给构造函数。由于指针在未经验证的情况下使用,因此有可能发生访问冲突。这促使我研究构造函数的初始化列表中的异常处理。我在其中一篇文章中发现可以在初始化列表中使用try。我写了一个小测试程序来测试这个概念://TestclassstorestheuniqueIDandreturnsthesamewithAPIgetTestIDclass

c++ - 避免切片异常类型 (C++)

我正在用C++为我的库设计异常层次结构。“层次结构”是从std::runtime_error派生的4个类。我想避免slicingproblem对于异常类,因此使复制构造函数受到保护。但显然gcc在抛出它们的实例时需要调用复制构造函数,因此提示protected复制构造函数。VisualC++8.0可以很好地编译相同的代码。是否有任何可移植的方法来化解异常类的切片问题?该标准是否说明了实现是否可以/应该需要要抛出的类的复制构造函数? 最佳答案 您的异常需要有一个公共(public)复制构造函数。编译器必须能够复制它才能使异常处理正常工

c++ - C++ 中的内存泄漏示例(通过使用异常)

在C中++Howtoprogram有一段说:Acommonprogrammingpracticeistoallocatedynamicmemory,assigntheaddressofthatmemorytoapointer,usethepointertomanipulatethememoryanddeallocatethememorywithdeletewhenthememoryisnolongerneeded.Ifanexceptionoccursaftersuccessfulmemoryallocationbutbeforethedeletestatementexecutes,a

c++ - Ogre 对异常的使用是使用它们的好方法吗?

到目前为止,我已经设法完成了我的C++游戏编程生涯,几乎从未接触过异常,但最近我一直在使用Ogre引擎开发一个项目,并且我正在努力学习。我在这里发现了很多关于C++异常的一般用法的很好的问题和答案,但我想从这里得到一些关于Ogre的用法是否良好以及如何最好地使用它们的外部意见。首先,引用Ogre自己的异常类的文档:OGREneverusesreturnvaluestoindicateerrors.Instead,ifanerroroccurs,anexceptionisthrown,andthisistheobjectthatencapsulatesthedetailoftheprob

C++ 返回值与异常性能

我在某处读到,现代英特尔处理器具有用于实现异常的低级硬件,大多数编译器都利用它,结果是异常变得比使用变量返回结果状态更快。这是真的吗?就返回状态/响应状态而言,异常是否比变量更快?阅读有关该主题的堆栈溢出似乎与此矛盾。谢谢 最佳答案 请注意,“异常处理程序”一词存在歧义。我相信您会发现硬件人员在谈论异常时意味着:硬件中断,又名信号,其处理程序有时称为异常处理程序(参见http://pages.cs.wisc.edu/~smoler/x86text/lect.notes/interrupts.html)机器检查异常,如果硬件出现问题会

c++ - 使用异常抛出构造函数初始化对象的正确方法

这似乎是一个微不足道的问题,但我现在已经挂了几个小时(也许太多的Java扼杀了我的C++脑细胞)。我创建了一个具有以下构造函数的类(即没有默认构造函数)VACaptureSource::VACaptureSource(std::stringinputType,std::stringinputLocation){if(type==""||location==""){throwstd::invalid_argument("EmptytypeorlocationinVACaptureSource()");}type=inputType;location=inputLocation;//Ope

c++ - 如果失败的析构函数不能抛出异常怎么办

我注意到您不能在析构函数中抛出异常。所以我的问题是如果析构函数失败我该怎么办。另一个问题是,在什么情况下析构函数可能会失败?非常感谢 最佳答案 忽略错误。如果类包装某种输出,并且析构函数刷新并关闭该输出,则析构函数可能“失败”。写入数据可能会失败。然后你的选择是终止程序,或者捕捉异常,忽略错误,然后返回。通常正确的设计是忽略它。在我的示例中,该类还应该有一个“close_and_flush”函数,如果用户想知道它是否成功,可以在对象销毁之前调用该函数。如果你的类的用户不关心操作是否失败,那么你也不关心,你可以安全地抑制异常。用户可以

c++未处理的异常 - 如何调试

在Debug模式下运行测试用例时遇到问题:我收到一个弹出框,其中显示消息“Test.exe中0x7c812fd3处未处理的异常:0xE0000003:0xe0000003。”。free.c中的代码中断:void__cdecl_free_base(void*pBlock){intretval=0;if(pBlock==NULL)return;RTCCALLBACK(_RTC_Free_hook,(pBlock,0));retval=HeapFree(_crtheap,0,pBlock);if(retval==0){errno=_get_errno_from_oserr(GetLastEr